
package py.fpuna.ii.electiva2.facade;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import py.fpuna.ii.electiva2.dto.ProductoDTO;
import py.fpuna.ii.electiva2.dto.ProveedorDTO;
import py.fpuna.ii.electiva2.interfaces.ProductoEAO;
import py.fpuna.ii.electiva2.interfaces.ProductoFacadeLocal;
import py.fpuna.ii.electiva2.interfaces.ProductoFacadeRemote;
import py.fpuna.ii.electiva2.interfaces.ProveedorEAO;

/**
 *
 * @author gonzaleza
 */
@Stateless
public class ProductoFacadeBean implements ProductoFacadeLocal, ProductoFacadeRemote{

    @EJB
    private ProveedorEAO provEao;
    private ProveedorDTO prov;

    @EJB
    private ProductoEAO prodEao;
    private ProductoDTO prodDto;

    public List<ProveedorDTO> listarProveedores() {
        List <ProveedorDTO> listProvRes = new ArrayList<ProveedorDTO>();
        listProvRes = provEao.findAll();
        return listProvRes;
    }

    /**
     * Inserta una entidad Producto en la base de datos
     * @return
     */
    public boolean insert(ProductoDTO pd){

        boolean retorno = false;

        try{
            prodDto = new ProductoDTO();
            prodDto.setProdCodigo(pd.getProdCodigo());
            prodDto.setProdDescripcion(pd.getProdDescripcion());
            prodDto.setProdCantidad(pd.getProdCantidad());

            System.out.print("insert producto facade");
            System.out.print("codigo " + pd.getProdCodigo());
            System.out.print("descripcion " + pd.getProdDescripcion());
            System.out.print("cantidad " + pd.getProdCantidad());
            System.out.print("compra " + pd.getProdPrecioCompra());
            System.out.print("venta " + pd.getProdPrecioVenta());
            System.out.print("proveedor" + pd.getProdProveedor().getProvCodigo());
            prov = provEao.find(pd.getProdProveedor().getProvCodigo());
            System.out.print("proveedor encontrado >> "+prov.getProvCodigo()+" - "+prov.getProvRazonSocial());
            prodDto.setProdProveedor(prov);

            prodDto.setProdPrecioCompra(pd.getProdPrecioCompra());
            prodDto.setProdPrecioVenta(pd.getProdPrecioVenta());
            
            prodDto.setCompraCollection(pd.getCompraCollection());

            if(prodEao.create(prodDto));
                retorno = true;

        }catch(Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            return retorno;
        }
        
    }

    public boolean update(ProductoDTO pd){

        boolean retorno = false;

        try{
            prodDto = new ProductoDTO();
            prodDto.setProdCodigo(pd.getProdCodigo());
            prodDto.setProdDescripcion(pd.getProdDescripcion());
            prodDto.setProdCantidad(pd.getProdCantidad());

            System.out.print(pd.getProdProveedor().getProvCodigo());
            prov = provEao.find(pd.getProdProveedor().getProvCodigo());
            prodDto.setProdProveedor(prov);

            prodDto.setProdPrecioCompra(pd.getProdPrecioCompra());
            prodDto.setProdPrecioVenta(pd.getProdPrecioVenta());

            prodEao.edit(prodDto);
            retorno = true;

        }catch(Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            return retorno;
        }

    }

    public List<ProductoDTO> getListaProductos(String condicion) throws Exception {
        List<ProductoDTO> retorno = new ArrayList();
        try {
            // recuperamos la lista
            retorno = prodEao.getListaProductos(condicion);
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }finally{
            return retorno;
        }
    }

    public List<ProductoDTO> getProductosEncontrados(String condicion) {
        List<ProductoDTO> retorno = new ArrayList();
        try {
            // recuperamos la lista
            retorno = prodEao.getProductosByDes(condicion);
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }finally{
            return retorno;
        }
    }
}
